US publication number 2013/0176322, entitled “Application-Transparent Resolution Control by Way of Command Stream Interception” (hereinafter “Resolution Control”) discloses an independent software program that is configured to run and intervene seamlessly on the fly between a graphical native application which is run on a CPU and a GPU which renders graphical commands in order to create an image on a screen or off screen buffers. This may be configured as shown in FIG. 4B of the aforesaid Resolution Control application wherein the Dynamic Resolution Modifier is interposed between the CPU and the GPU. Absent such a software program, the GPU will render an image based on the input of stream of commands and shaders as were generated by the native application from the CPU.
By interposing the Dynamic Resolution Modifier between the CPU and the GPU, it receives a stream of commands and shaders which were generated by the native application as its input instead of the native flow of the 3d API towards the GPU. It then intercepts and analyzes them and based on different considerations such as user experience, heat level, frame rate, power consumption or battery level, may change some or all of these commands and/or shaders, as graphically shown on the right hand side of the drawing in FIG. 4B. A modified stream of commands and/or shaders may be generated by a spatial resolution controller which is then sent to the GPU for rendering instead of the original commands and shaders which were generated by the native application from the CPU. In this way, the software program dynamically, in real time, controls and modifies the resolution of an image on a frame by frame, resource by resource basis. As such, it has the capability to sample a resource in one resolution and write that resource into a different resolution.
It is known to those skilled in the art that reading and writing may be done from/to a single resource or from/to multiple resources. A resolution reduction of a resource may be done by modifying the API commands, which for the sake of this entire application may be 3D or 2D, to render only part of that resource. As the state of the native application, hardware or other resources of the system on which the native application runs change, the resolution of a frame or a resource may be scaled up again. A resource which has been modified by a dynamic resolution modifier no longer carries with it the original resolution as generated previously by the native application. Up scaling such modified resources requires proper sampling and rendering techniques in order to keep user experience above a predefined threshold. This is critical to 2D Heads Up Displays (HUD) resources as well as others.
Also, in the prior art, anti-aliasing (AA) mechanisms such as super sampling (SSAA) and multi sampling (MSAA) are known. Such mechanisms, as known to those skilled in the art, sample at least one spot in a resource's pixel and calculate the visibility of such pixel in the rendered resource based on coverage and occlusion criteria of a primitive polygon it has to render. Primitive polygons such as triangles or lines inherently have discontinuities. This leads to unavoidable aliasing, irrespective of the sampling rate chosen. AA software creates a grid of sampling points to be sampled in a resource's pixel. Such a grid may include 1, 2, 3, 4, 5, 6, 7, 8 or more sampling points per pixel. Moreover, the spatial distribution of such sampling points may be along the main axis x and y of a pixel or at any rotated angle. For example, a technique known as MSAAX4 may practice a grid of 4 sampling points per pixel that are rotated at 45 degrees angle to the main axis of the pixel. Statistics show that better sensitivity to detect geometrical edges is achieved by using a rotated grid. In practice, in this example, 4 samples are taken per pixel. This data set of 4 points is then used in order to render this sampled pixel. Any pixel in the original resource is rendered into a new pixel in the new resource. However, note that there is no change of a final resource resolution. This is a simple pixel to pixel conversion. The only purpose of this mechanism is to reduce aliasing. The way aliasing is reduced is by averaging the sampled data points of each pixel. Once data points are averaged, the raw sampled data disappears and there is no further use for this data. SSMA increases the system processing costs of rendering and it is hardly used today. MSAA, on the other hand, requires less system resources and is widely used for anti-aliasing purposes. An article which discusses MSAA in detail is “A Quick Overview of MSA”, by Matt Pettineo, published Oct. 24, 2012.